package com.feng.exer;

import com.feng.exer2.OtherMethods;
import com.feng.exer2.OtherMethodsImpl;
import org.junit.Test;

public class test {
    @Test
    public void testAdd(){
        //定义几个结点
        DefineNode node1 = new DefineNode(1,"白云","by");
        DefineNode node2 = new DefineNode(2,"乌云","wy");
        DefineNode node3 = new DefineNode(3,"彩云","cy");
        DefineNode node4 = new DefineNode(4,"灰云","hy");
        CreateLinklist linklist = new CreateLinklistImpl();
        linklist.add(node1);
        linklist.add(node2);
        linklist.add(node3);
        linklist.add(node4);
        linklist.display();
    }

    @Test
    public void testAddById(){
        CreateLinklist linklist = new CreateLinklistImpl();
        DefineNode node1 = new DefineNode(1,"白云","by");
        DefineNode node2 = new DefineNode(1,"白云","by");
        DefineNode node3 = new DefineNode(2,"云","y");
        linklist.addById(node1);
        linklist.addById(node3);
        linklist.addById(node2);//存在相同的id，添加失败
        linklist.display();
    }

    @Test
    public void testDel(){
        DefineNode node1 = new DefineNode(1,"白云","by");
        DefineNode node2 = new DefineNode(2,"乌云","wy");
        CreateLinklist linklist = new CreateLinklistImpl();
        linklist.add(node1);
        linklist.add(node2);
        System.out.println("删除之前的链表：");
        linklist.display();
        linklist.del(1);
        linklist.del(3);//需要删除的结点不存在
        System.out.println("删除之后的链表：");
        linklist.display();
    }

    @Test
    public void testUpdate1(){
        DefineNode node1 = new DefineNode(1,"白云","by");
        DefineNode node2 = new DefineNode(2,"乌云","wy");
        DefineNode node3 = new DefineNode(2,"天空","tk");
        DefineNode node4 = new DefineNode(3,"ws","12");
        CreateLinklist linklist = new CreateLinklistImpl();
        linklist.add(node1);
        linklist.add(node2);
        System.out.println("更新之前的链表：");
        linklist.display();
        linklist.update1(node3);
        linklist.update1(node4);//需要更新的结点不存在
        System.out.println("更新之后的链表：");
        linklist.display();
    }

    @Test
    public void testUpdate2(){
        DefineNode node1 = new DefineNode(1,"白云","by");
        DefineNode node2 = new DefineNode(2,"乌云","wy");
        DefineNode node3 = new DefineNode(2,"天空","tk");
        DefineNode node4 = new DefineNode(3,"ws","12");
        CreateLinklist linklist = new CreateLinklistImpl();
        linklist.add(node1);
        linklist.add(node2);
        System.out.println("更新之前的链表：");
        linklist.display();
        linklist.update2(node3);
        linklist.update2(node4);//需要更新的结点不存在
        System.out.println("更新之后的链表：");
        linklist.display();
    }

    //测试头插法
    @Test
    public void testHeadAdd(){
        DefineNode node1 = new DefineNode(1,"白云","by");
        DefineNode node2 = new DefineNode(2,"乌云","wy");
        DefineNode node3 = new DefineNode(3,"彩云","cy");
        DefineNode node4 = new DefineNode(4,"灰云","hy");
        CreateLinklist linklist = new CreateLinklistImpl();
        linklist.HeadAdd(node1);
        linklist.HeadAdd(node2);
        linklist.HeadAdd(node3);
        linklist.HeadAdd(node4);
        linklist.display();
    }
}
